package py.progweb.sgc.manager.impl;

import javax.annotation.security.PermitAll;
import py.progweb.sgc.manager.exceptions.*;
import java.util.*;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;

import py.progweb.sgc.manager.ABMManagerLocal;
import py.progweb.sgc.manager.VentasFacadeLocal;
import py.progweb.sgc.manager.exceptions.ServiceException;
import py.progweb.sgc.model.Factura;
import py.progweb.sgc.model.Venta;
import py.progweb.sgc.model.VentaDetalle;

@Stateless(name="VentasFacade")
@TransactionManagement(TransactionManagementType.CONTAINER)
public class VentasFacadeImpl implements VentasFacadeLocal{
	@EJB
	private ABMManagerLocal ventaEAO;
	
	@PermitAll
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public void guardarVenta(Venta venta) throws ServiceException{
		try{
			ventaEAO.guardar(venta);
			Iterator <VentaDetalle> iterator= venta.getVentaDetalles().iterator();
			Integer saldo = 0;
			while (iterator.hasNext()){
				VentaDetalle ventaDetalle = iterator.next();
				ventaDetalle.getProducto().setStock(ventaDetalle.getProducto().getStock()- ventaDetalle.getCantidad());
				if (ventaDetalle.getProducto().getStock()<0){
					throw new ServiceException("\nLa cantidad solicitada del producto \""+ventaDetalle.getProducto().getNombre()+"\" excede su stock");
				}
				saldo = ventaDetalle.getPrecioVenta()+ saldo;
				ventaEAO.guardar(ventaDetalle.getProducto());
				ventaEAO.guardar(ventaDetalle);
			}			
			Factura factura = new Factura();
			factura.setVenta(venta);
			factura.setSaldo(saldo);
			factura.setEstado("pendiente");
			ventaEAO.guardar(factura);
		}catch(Exception e){
			throw new ServiceException(e);
		}		
	}
}
